package cn.cnlee.app.ui.news;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ProgressBar;

import butterknife.BindView;
import butterknife.ButterKnife;
import cn.cnlee.app.R;
import cn.cnlee.app.base.AbsLifecycleFragment;
import cn.cnlee.app.config.Constants;
import cn.cnlee.app.pojo.IdVo;
import cn.cnlee.app.pojo.NewsContentDTO;
import cn.cnlee.app.repository.NewsRepository;
import cn.cnlee.app.vm.NewsViewModel;
import cn.cnlee.arch.util.Logger;

public class NewsContentFragment extends AbsLifecycleFragment<NewsViewModel> {
    public static NewsContentFragment newInstance() {
        return new NewsContentFragment();
    }

    private IdVo idVo = new IdVo(5431177);

    @BindView(R.id.wv_content)
    WebView mWebView;

    @BindView(R.id.progress_bar)
    ProgressBar progressBar;

    @Override
    public int getLayoutResId() {
        return R.layout.news_content_fragment_layout;
    }

    @Override
    public int getContentResId() {
        return R.id.wv_content;
    }

    @Override
    public void initView(Bundle state) {
        super.initView(state);
        ButterKnife.bind(this, rootView);

        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);// 是否开启JS支持
//        webSettings.setPluginsEnabled(true);// 是否开启插件支持
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);// 是否允许JS打开新窗口

        webSettings.setUseWideViewPort(true);// 缩放至屏幕大小
        webSettings.setLoadWithOverviewMode(true);// 缩放至屏幕大小
        webSettings.setSupportZoom(true);// 是否支持缩放
        webSettings.setBuiltInZoomControls(true);// 是否支持缩放变焦，前提是支持缩放
        webSettings.setDisplayZoomControls(false);// 是否隐藏缩放控件

        webSettings.setAllowFileAccess(true);// 是否允许访问文件
        webSettings.setDomStorageEnabled(true);// 是否节点缓存
        webSettings.setDatabaseEnabled(true);// 是否数据缓存
        webSettings.setAppCacheEnabled(true);// 是否应用缓存
//        webSettings.setAppCachePath(uri);// 设置缓存路径

        webSettings.setMediaPlaybackRequiresUserGesture(false);// 是否要手势触发媒体
        webSettings.setStandardFontFamily("sans-serif");// 设置字体库格式
        webSettings.setFixedFontFamily("monospace");// 设置字体库格式
        webSettings.setSansSerifFontFamily("sans-serif");// 设置字体库格式
        webSettings.setSerifFontFamily("sans-serif");// 设置字体库格式
        webSettings.setCursiveFontFamily("cursive");// 设置字体库格式
        webSettings.setFantasyFontFamily("fantasy");// 设置字体库格式
        webSettings.setTextZoom(100);// 设置文本缩放的百分比
        webSettings.setMinimumFontSize(8);// 设置文本字体的最小值(1~72)
        webSettings.setDefaultFontSize(16);// 设置文本字体默认的大小

//        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);// 按规则重新布局
        webSettings.setLoadsImagesAutomatically(false);// 是否自动加载图片
        webSettings.setDefaultTextEncodingName("UTF-8");// 设置编码格式
        webSettings.setNeedInitialFocus(true);// 是否需要获取焦点
        webSettings.setGeolocationEnabled(false);// 设置开启定位功能
        webSettings.setBlockNetworkLoads(false);// 是否从网络获取资源

        mWebView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                progressBar.setVisibility(View.VISIBLE);
                progressBar.setProgress(newProgress);
                if (newProgress == 100) {
                    progressBar.setVisibility(View.INVISIBLE);
                }
                super.onProgressChanged(view, newProgress);
            }
        });
    }

    @Override
    protected void lazyLoad() {
        getNewsData();
    }

    @Override
    protected void dataObserver() {
        if (getArguments() != null) {
            idVo = new IdVo(getArguments().getInt(Constants.F_NEWS_ID, 5431177));
        }
        registerSubscriber(NewsRepository.EVENT_KEY_NEW_CONTENT_DATA, NewsContentDTO.class).observe(this, newsContentDTO -> {
            if (newsContentDTO != null) {
                setData(newsContentDTO);
            }
        });
    }


    @Override
    protected void onStateRefresh() {
        super.onStateRefresh();
        getNewsData();
    }

    private void getNewsData() {
        Logger.e("====getNewsData======" + idVo);
        mViewModel.getArticleContent(idVo);
    }

    public void setData(NewsContentDTO newsContentDTO) {
        mWebView.loadUrl(newsContentDTO.url);
    }

}
